#ifndef DW_GRAPHICS_PIXELBUFFER_H
#	define DW_GRAPHICS_PIXELBUFFER_H

#	include "graphics/pixelformat.h"

#include "system/buffer.h"

namespace dw
{
	namespace graphics
	{

		using system::IBuffer;

		class IPixelBuffer : public IBuffer
		{
		// Constructors
		public:

			IPixelBuffer(const PixelFormat& pixelFormat = PF_RGB, 
				const uint32 width = 0,  
				const Usage& usage = BU_STATIC);

			IPixelBuffer(const PixelFormat& pixelFormat, 
				const uint32 width, 
				const uint32 height, 
				const Usage& usage);
			
			IPixelBuffer(const PixelFormat& pixelFormat, 
				const uint32 width, 
				const uint32 height, 
				const uint32 depth,
				const Usage& usage);

			virtual ~IPixelBuffer() {}

		// Methods
		public:
			
			const PixelFormat& getPixelFormat()		const { return _pixelFormat; }

			const PixelFormat& getInternalFormat()	const { return _internalFormat; }
			
			const uint32 getWidth()					const { return _width; }
			
			const uint32 getHeight()					const { return _height; }

			const uint32 getDepth()					const { return _depth; }

			const uint32 getBpp()						const {	return _bpp; }
			
		protected:
			
			PixelFormat _pixelFormat;

			PixelFormat _internalFormat;	
			
			uint32 _width;
			
			uint32 _height;

			uint32 _depth;

			uint32 _bpp;
		
		};

	} // namespace graphics
} // namespace dw

#endif // !DW_GRAPHICS_PIXELBUFFER_H
